package com.wande.dataplatform.filecollection.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.filecollection.domain.bo.UnstructuredFileBo;
import com.wande.dataplatform.filecollection.domain.vo.UnstructuredFileVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 非结构化文件服务接口
 *
 * @author wande
 */
public interface IUnstructuredFileService {

    /**
     * 上传单个文件
     *
     * @param file 文件
     * @param bo   业务对象
     * @return 文件ID
     */
    Long uploadFile(MultipartFile file, UnstructuredFileBo bo);

    /**
     * 批量上传文件
     *
     * @param files 文件列表
     * @param bo    业务对象
     * @return 文件ID列表
     */
    List<Long> uploadFiles(List<MultipartFile> files, UnstructuredFileBo bo);

    /**
     * 从指定来源采集文件
     *
     * @param sourceType   来源类型
     * @param sourceConfig 来源配置
     */
    void collectFiles(String sourceType, String sourceConfig);

    /**
     * 查询文件详情
     *
     * @param id 文件ID
     * @return 文件详情
     */
    UnstructuredFileVo getFile(Long id);

    /**
     * 分页查询文件列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 文件列表
     */
    TableDataInfo<UnstructuredFileVo> listFiles(UnstructuredFileBo bo, PageQuery pageQuery);

    /**
     * 删除文件
     *
     * @param id 文件ID
     */
    void deleteFile(Long id);

    /**
     * 批量删除文件
     *
     * @param ids 文件ID列表
     */
    void deleteFiles(List<Long> ids);

    /**
     * 获取文件下载URL
     *
     * @param id 文件ID
     * @return 下载URL
     */
    String getDownloadUrl(Long id);

    /**
     * 提取文件元数据
     *
     * @param file 文件
     * @return 元数据
     */
    Map<String, Object> extractMetadata(MultipartFile file);
}
